/*
 * chat_list.h
 *
 *  Created on: 2012-7-4
 *      Author: rendong
 */

#ifndef CHAT_LIST_H_
#define CHAT_LIST_H_

// 列表项
typedef struct _chat_list_item_s chat_list_item_t;

struct _chat_list_item_s{
	void * elts;
	chat_list_item_t *pre;
	chat_list_item_t * next;
};

// 列表
typedef struct _chat_list_s{
	chat_list_item_t *head;
	chat_list_item_t *last;
	size_t size;
} chat_list_t;


/**
 * 创建
 */
chat_list_t * chat_list_create();

/**
 * 添加元素到列表尾部
 */
void chat_list_push(chat_list_t *list, void *elements);

/**
 * 将尾部元素弹出,并返回元素本身
 */
void * chat_list_pop(chat_list_t *list);

/**
 * 将头部元素弹出
 */
void * chat_list_shift(chat_list_t *list);

/**
 * 添加元素到列表头部
 */
void chat_list_unshift(chat_list_t *list, void *elements);

/**
 * 删除元素
 */
void chat_list_del(chat_list_t *list, void *elements);

/**
 * 对每个元素进行遍历
 */
void chat_list_foreach(chat_list_t *list, void *data, void (*handler)(void *elements, int index, void * data));


#endif /* CHAT_LIST_H_ */
